package doan.chuyennganh.util;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHelper extends SQLiteOpenHelper{

public DBHelper(Context context)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        this.myContext = context;   
        try
        {   
            createDataBase();
            //BugSenseHandler.setup(this.myContext, "0670ce92");
            //BugSenseHandler.readLogs(); 
        }
        catch (Exception e)
        {   
            Log.e(TAG,"DatabaseHelper_constuctor createDataBase :" + e.fillInStackTrace());   
        }
    }


    private static final String TAG = "DatabaseHelper"; 
    //Your Database Name
    private static final String DATABASE_NAME = "questionDb.sqlite";
    //Your Your Database Version
    private static final int DATABASE_VERSION = 1;
    private final Context myContext;
    private static SQLiteDatabase myDataBase; 
    //The Android's default system path of your application database. DB_PATH = "/data/data/YOUR_PACKAGE/databases/"
    private static String DB_PATH = "/data/data/com.tmm.android.chuck/databases/";

//*****************************  Constructor *****************************
/**
* Constructor
* Takes and keeps a reference of the passed context in order to access to the application assets and resources.
* @param context
**/

//*****************************  SQLiteOpenHelper's Methods *****************************
@Override
public void onCreate(SQLiteDatabase db) {
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}


@Override
public synchronized void close() 
{
        if(myDataBase != null)
            myDataBase.close();
        super.close();
}

//*****************************  My DB Handler Methods *****************************
/**
* Creates a empty database on the system and rewrites it with your own database.
**/
public void createDataBase() throws IOException
{
    boolean dbExist = checkDataBase();
    if(dbExist)
    {
        //Database already exist
        try {
			openDataBase();
		} catch (SQLException e) {
			e.printStackTrace();
		}

    }
    else
    {
        //By calling this method and empty database will be created into the default system path
        //of your application so we are gonna be able to overwrite that database with our database.
        myDataBase = getWritableDatabase();
        try 
        {
            copyDataBase(); 
        } 
        catch (IOException e) 
        {
            throw new Error("Error createDataBase().");
        }
    }
}
/**
* Check if the database already exist to avoid re-copying the file each time you open the application.
* @return true if it exists, false if it doesn't
**/
private boolean checkDataBase()
{

    SQLiteDatabase checkDB = null;
    try
    {
        String myPath = DB_PATH + DATABASE_NAME;
        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    }
    catch(SQLiteException e)
    {
        //database does't exist yet.
    }
    if(checkDB != null)
    {
        checkDB.close();
    }
    return checkDB != null ? true : false;
}
/*public boolean isDataBaseExist() 
{
    File dbFile = new File(DB_PATH + DATABASE_NAME);
    return dbFile.exists();
}*/

/**
* Copies your database from your local assets-folder to the just created empty database in the
* system folder, from where it can be accessed and handled.
* This is done by transferring bytestream.
**/ 
private void copyDataBase() throws IOException
{
    try
    {
        //Open your local db as the input stream
        InputStream myInput = myContext.getAssets().open("DATABASE_NAME");

        // Path to the just created empty db
        String outFileName = DB_PATH + DATABASE_NAME;

        //Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);

        //transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0)
        {
            myOutput.write(buffer, 0, length);
        }

        //Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();
    }
    catch (IOException e) 
    {
        throw new Error("Error copyDataBase().");
    }
}

public void openDataBase() throws SQLException, IOException
{
    try 
    {
        //Open the database
        String myPath = DB_PATH + DATABASE_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    } 
    catch (SQLiteException e) 
    {
        throw new Error("Error openDataBase().");
    }       
}

//public static List<ItemClass> getAnswerList()
//{
//    List<ItemClass> resultList = new ArrayList<ReminderItemClass>();
//    ItemClass obj;
//    Cursor cursor;
//    String query;
//
//    query = "SELECT * FROM tblName"; 
//    try
//    {
//        cursor = myDataBase.rawQuery(query,null); 
//        if(cursor != null)
//        {
//
//            while(cursor.moveToNext())
//            {
//                obj=new ReminderItemClass();
//                obj.id=cursor.getString(0);
//                obj.title=cursor.getString(1);
//                .
//            .
//                resultList.add(obj);
//            }
//        }
//        cursor.deactivate();
//
//
//    }
//    catch (Exception e)
//    {
//        Log.e(TAG,"Error : " + e.fillInStackTrace());
//
//    }
//    return resultList;
//}


}
